[BUILDER] Propagate the native protocol ABI for a guest out of the
authorIan Campbell <ian.campbell@xensource.com>
Tue, 15 May 2007 16:54:48 +0000 (17:54 +0100)
committerIan Campbell <ian.campbell@xensource.com>
Tue, 15 May 2007 16:54:48 +0000 (17:54 +0100)
domain builder and in to python code.

This knowledge will be useful to allow us to pre-seed the protocol
field in a VBD entry in xenstore which will allow us to run older
kernels in a 32on64 mixed environment.

Signed-off-by: Ian Campbell <ian.campbell@xensource.com>
tools/libxc/xc_dom.h
tools/libxc/xc_dom_x86.c
tools/python/xen/lowlevel/xc/xc.c

index 7c00c45cc5033027e55d8c8f67f1588d5494ed77..2a42b874fec8424b9d1903ee65f74e75d691085a 100644 (file)
@@ -136,6 +136,7 @@ struct xc_dom_arch {
     int (*vcpu) (struct xc_dom_image * dom, void *vcpu_ctxt);
 
     char *guest_type;
+    char *native_protocol;
     int page_shift;
     int sizeof_pfn;
 
index 97fd298d6b200cff6beb7541866c2e437db6092f..c94dfe0ea8ab25909c4aed89957997621fac6d61 100644 (file)
@@ -19,6 +19,7 @@
 #include <xen/foreign/x86_64.h>
 #include <xen/hvm/hvm_info_table.h>
 #include <xen/hvm/e820.h>
+#include <xen/io/protocols.h>
 
 #include "xg_private.h"
 #include "xc_dom.h"
@@ -589,6 +590,7 @@ static int vcpu_x86_64(struct xc_dom_image *dom, void *ptr)
 
 static struct xc_dom_arch xc_dom_32 = {
     .guest_type = "xen-3.0-x86_32",
+    .native_protocol = XEN_IO_PROTO_ABI_X86_32,
     .page_shift = PAGE_SHIFT_X86,
     .sizeof_pfn = 4,
     .alloc_magic_pages = alloc_magic_pages,
@@ -600,6 +602,7 @@ static struct xc_dom_arch xc_dom_32 = {
 };
 static struct xc_dom_arch xc_dom_32_pae = {
     .guest_type = "xen-3.0-x86_32p",
+    .native_protocol = XEN_IO_PROTO_ABI_X86_32,
     .page_shift = PAGE_SHIFT_X86,
     .sizeof_pfn = 4,
     .alloc_magic_pages = alloc_magic_pages,
@@ -612,6 +615,7 @@ static struct xc_dom_arch xc_dom_32_pae = {
 
 static struct xc_dom_arch xc_dom_64 = {
     .guest_type = "xen-3.0-x86_64",
+    .native_protocol = XEN_IO_PROTO_ABI_X86_64,
     .page_shift = PAGE_SHIFT_X86,
     .sizeof_pfn = 8,
     .alloc_magic_pages = alloc_magic_pages,
index c40a900cb34ddbc62478d8032d695793934d0ba1..cf555f4469bb8f0e5e4d7511687311d8335d9630 100644 (file)
@@ -407,6 +407,7 @@ static PyObject *pyxc_linux_build(XcObject *self,
     unsigned long console_mfn = 0;
     PyObject* elfnote_dict;
     PyObject* elfnote = NULL;
+    PyObject* ret;
     int i;
 
     static char *kwd_list[] = { "domid", "store_evtchn", "memsize",
@@ -455,12 +456,22 @@ static PyObject *pyxc_linux_build(XcObject *self,
        Py_DECREF(elfnote);
     }
 
+    ret = Py_BuildValue("{s:i,s:i,s:N}",
+                       "store_mfn", store_mfn,
+                       "console_mfn", console_mfn,
+                       "notes", elfnote_dict);
+
+    if ( dom->arch_hooks->native_protocol )
+    {
+       PyObject *native_protocol =
+           Py_BuildValue("s", dom->arch_hooks->native_protocol);
+       PyDict_SetItemString(ret, "native_protocol", native_protocol);
+       Py_DECREF(native_protocol);
+    }
+
     xc_dom_release(dom);
 
-    return Py_BuildValue("{s:i,s:i,s:N}", 
-                         "store_mfn", store_mfn,
-                         "console_mfn", console_mfn,
-                        "notes", elfnote_dict);
+    return ret;
 
   out:
     xc_dom_release(dom);